﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Sicoagro.Models;
using System.Net;
using System.Web.Script.Serialization;
using System.IO;
using System.Text;

namespace Sicoagro.Controllers
{
    public class OfertanteController : Controller
    {


        private List<Contratante> CrearContratantes()
        {
            List<Contratante> contratantes = new List<Contratante>();
            //contratantes.Add(new Contratante { CodContratante = 1, TipoDocContratante = "DNI", NumDocContratante = "45103980", RazonSocial = "Pedro Ruiz", EmailContratante = "pruiz", NumTelefContratante = "992758106", StdRegistro = 1 });
            //contratantes.Add(new Contratante { CodContratante = 2, TipoDocContratante = "DNI", NumDocContratante = "09302845", RazonSocial = "Elena Ramirez", EmailContratante = "eramirez", NumTelefContratante = "4932448", StdRegistro = 1 });
            //contratantes.Add(new Contratante { CodContratante = 3, TipoDocContratante = "DNI", NumDocContratante = "05839239", RazonSocial = "Renzo Gallardo", EmailContratante = "rgallardo", NumTelefContratante = "998542100", StdRegistro = 1 });
            //contratantes.Add(new Contratante { CodContratante = 4, TipoDocContratante = "DNI", NumDocContratante = "48929393", RazonSocial = "Maria Delgado", EmailContratante = "mdelgado", NumTelefContratante = "5201212", StdRegistro = 0 });

            return contratantes;
        }

        private bool VerificarEstadoContratante(int id)
        {
            if (Session["contratantes"] == null)
                Session["contratantes"] = CrearContratantes();
            List<Contratante> contratantes = (List<Contratante>)Session["contratantes"];

            foreach (Contratante contratante in contratantes)
            {
                if (contratante.CodContratante == id && contratante.StdRegistro ==0) 
                {
                    return true;
                }
            }
            return false;
        }

        private Ofertante ObtenerOfertante(string id)
        {
            string url = "http://localhost:17719/Ofertantes.svc/Ofertantes/"+id;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;
            
            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string ofertanteJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            Ofertante resultado = js.Deserialize<Ofertante>(ofertanteJson);
            ListarProductosPorOfertante(int.Parse(id));
            return resultado;

            //if (VerificarEstadoContratante(int.Parse(id)))
            //{
            //    ViewData["Deshabilitado"] = true;
            //}
            //else
            //{
            //    ViewData["Deshabilitado"] = false;
            //}
            //return resultado;
        }

        private void ListarDepartamentos()
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string departamentoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Departamento> resultado = js.Deserialize<List<Departamento>>(departamentoJson);

            ViewData["listaDepartamentos"] = resultado;
        }

        private void ListarProvincias(string departamento)
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo/" + departamento;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string provinciaJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Provincia> resultado = js.Deserialize<List<Provincia>>(provinciaJson);

            ViewData["listaProvincias"] = resultado;
        }

        private void ListarDistritos(string departamento, string provincia)
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo/" + departamento + "," + provincia;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string distritoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Distrito> resultado = js.Deserialize<List<Distrito>>(distritoJson);

            ViewData["listaDistritos"] = resultado;
        }


        private void ListarCategorias()
        {
            string url = "http://localhost:17719/Productos.svc/Productos";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string categoriaJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Categoria> resultado = js.Deserialize<List<Categoria>>(categoriaJson);

            ViewData["listaCategorias"] = resultado;
        }

        private void ListarProductos(string categoria)
        {
            string url = "http://localhost:17719/Productos.svc/Productos/" + categoria;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string productoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Producto> resultado = js.Deserialize<List<Producto>>(productoJson);

            if (resultado == null)
                resultado = new List<Producto>();

            ViewData["listaProductos"] = resultado;
        }

        private void ListarProductosPorOfertante(int idOfertante)
        {
            string url = "http://localhost:17719/Productos.svc/Productos/" + idOfertante.ToString()+",0";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string productoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Producto> resultado = js.Deserialize<List<Producto>>(productoJson);

            if (resultado == null)
                resultado = new List<Producto>();

            ViewData["listaProductosOfertante"] = resultado;
        }

        private List<Ofertante> BuscarOfertantes(string dpto, string prov, string dist, string ctg, string prd, string nomOfer)
        {
            string nomOfertante;
            string departamento;
            string provincia;
            string distrito;
            string categoria;
            string producto;

            if (nomOfer == null || nomOfer == "")
                nomOfertante = "0";
            else
                nomOfertante = nomOfer;

            if (dpto == null || dpto == "")
                departamento = "0";
            else
                departamento = dpto;

            if (prov == null || prov == "")
                provincia = "0";
            else
                provincia = prov;

            if (dist == null || dist == "")
                distrito = "0";
            else
                distrito = dist;

            if (ctg == null || ctg == "")
                categoria = "0";
            else
                categoria = ctg;

            if (prd == null || prd == "")
                producto = "0";
            else
                producto = prd;

            ViewData["nomOfertante"] = nomOfer;
            ViewData["departamento"] = departamento;
            ViewData["provincia"] = provincia;
            ViewData["distrito"] = distrito;
            ViewData["categoria"] = categoria;
            ViewData["producto"] = producto;

            this.ListarDepartamentos();
            this.ListarCategorias();

            if (departamento != "0")
                this.ListarProvincias(departamento);

            if (provincia != "0")
                this.ListarDistritos(departamento, provincia);

            if (categoria != "0")
                this.ListarProductos(categoria);

            string url = "http://localhost:17719/Ofertantes.svc/Ofertantes/" + nomOfertante + "," + departamento + "," + provincia + "," + distrito + "," + categoria + "," + producto;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;
            try
            {
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string ofertanteJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                List<Ofertante> resultado = js.Deserialize<List<Ofertante>>(ofertanteJson);
                return resultado;

            }
            catch (WebException e)
            {
                HttpWebResponse resError = (HttpWebResponse)e.Response;
                StreamReader readerError = new StreamReader(resError.GetResponseStream());
                string error = readerError.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                string errorMessage = error; //js.Deserialize<string>(error);
                ViewData["msgError"] = errorMessage;
                return new List<Ofertante>();
            }
        }

        //  
        // GET: /Ofertante/
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Search(string dpto, string prov, string dist, string ctg, string prd, string nomOfer)
        {
            List<Ofertante> model = BuscarOfertantes(dpto, prov, dist, ctg, prd, nomOfer);
            return View(model);
        }


        public ActionResult ViewDetails(int id)
        {
            var model = ObtenerOfertante(id.ToString());
            Session["idOfertante"] = id.ToString();
            return View(model);
        }

        public ActionResult Create()
        {
            return View();
        } 

        private List<Ofertante> CrearOfertantes()
        {
            List<Ofertante> ofertantes = new List<Ofertante>();
            ofertantes.Add(new Ofertante() { CodOfertante = 1, TipoDocOfertante = "DNI", NumDocOfertante = "42526208", EmailOfertante = "info@enotria.com.pe", UsuarioOfertante = "userTest_2", ClaveOfertante = "userTest_2", RazonSocial = "ENOTRIA SAC", DepOfertante = "Lima", ProvOfertante = "Lima", DistOfertante = "Ate", DirecOfertante = "Av. Nicolay Ayllon 123", NumTelefOfertante = "4657890", StdRegistro = 0 });
            ofertantes.Add(new Ofertante() { CodOfertante = 2, TipoDocOfertante = "RUC", NumDocOfertante = "20201010221", EmailOfertante = "info@vs.com.pe", UsuarioOfertante = "userTest_1", ClaveOfertante = "userTest_1", RazonSocial = "VOICE & SOLUTION SAC", DepOfertante = "Lima", ProvOfertante = "Lima", DistOfertante = "Los Olivos", DirecOfertante = "Av. Santos Chocano 822", NumTelefOfertante = "3451245", StdRegistro = 0 });
            return ofertantes;
        }

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
           //    (TipoDocOfertante, NumDocOfertante, EmailOfertante, UsuarioOfertante, ClaveOfertante, RazonSocial, DepOfertante, ProvOfertante, DistOfertante, DirecOfertante, NumTelefOfertante
            string postdata = "{\"TipoDocOfertante\":\"" + collection["depTipoDocSelect"] +
                                  "\",\"NumDocOfertante\":\"" + collection["NumDocOfertante"] + 
                                  "\",\"EmailOfertante\":\"" + collection["EmailOfertante"] +
                                  "\",\"UsuarioOfertante\":\"" + collection["UsuarioOfertante"] + 
                                   "\",\"ClaveOfertante\":\"" + collection["ClaveOfertante"] +
                                  "\",\"RazonSocial\":\"" + collection["RazonSocial"] + 
                                  "\",\"DepOfertante\":\"" + collection["depSelect"] +
                                  "\",\"ProvOfertante\":\"" + collection["provSelect"] +
                                 "\",\"DistOfertante\":\"" + collection["distSelect"] +
                                  "\",\"FlgMembresia\":\"" + collection["flgMemSelect"] + 
                                  "\",\"NumTelefOfertante\":\"" + collection["NumTelefOfertante"] +
                                  "\"}";

                
                byte[] data = Encoding.UTF8.GetBytes(postdata);
                string url = "http://localhost:17719/Ofertantes.svc/Ofertantes";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";    
                req.ContentLength = data.Length;
                req.ContentType = "application/json";
                var reqStream = req.GetRequestStream();
                reqStream.Write(data, 0, data.Length);

                var res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string ofertanteJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Ofertante resultado = js.Deserialize<Ofertante>(ofertanteJson);

               // JavaScriptSerializer js = new JavaScriptSerializer();
               //Ofertante resultado = js.Deserialize<Ofertante>(ofertanteJson);      



            int codigo = 0;
            try
            { 
                if (resultado ==  null){
                  TempData["notice"] = "ERROR";
                }
                   return RedirectToAction("ViewDetails", new { id = codigo });
            }
               
            catch (NullReferenceException e)
            {
                Console.WriteLine("{0} Exception caught.", e);
                return View();
            }
        }

        
        private List<Mensaje> BuscarMensajes(string id)
        {
            HttpWebRequest req2 = (HttpWebRequest)WebRequest
                .Create("http://localhost:3191/Membresias.svc/Mensajes/"+id);
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string alumnoJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            List<Mensaje> listaMensajes = js2.Deserialize<List<Mensaje>>(alumnoJson2);
            return listaMensajes;
        }

        public ActionResult BandejaMensajes(int id)
        {
            List<Mensaje> model = BuscarMensajes(id.ToString());
            return View(model);
        }

        public ActionResult Enviar(FormCollection form)
        {
            
            string fecha = DateTime.Now.ToString("mm/dd/yyyy");
            string postdata = "{\"DscMensaje\":\"" + form["mensaje"].ToString() + "\",\"FechMensaje\":\"" + fecha + "\",\"CodOfertante\":\"" + Session["idOfertante"] + "\",\"CodContratante\":\"4\"}"; //JSON
            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:3191/Membresias.svc/Mensajes");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";
            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            var res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string alumnoJson = reader.ReadToEnd();
            return RedirectToAction("ViewDetails/" + int.Parse(Session["idOfertante"].ToString()) + "");
        }

    }
}
